/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package amanda_gabriel_isabella_lucivania_monica.Model.Pojo;

import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import javax.persistence.Transient;

/**
 * Entidade Aluno
 *
 * @author amanda
 */
@Entity
@Table(name = "Aluno")
@PrimaryKeyJoinColumn(name = "fk_id_pessoa", referencedColumnName = "id_pessoa")
public class Aluno extends Pessoa {

    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

    /**
     * Construtor da classe Aluno sem parâmetros
     */
    public Aluno() {
    }

    /**
     * Construtor da classe Aluno com parâmetros
     *
     * @param nome
     * @param cpf
     */
    public Aluno(String nome, String cpf) {
        super(nome, cpf);
    }
    @OneToMany(mappedBy = "aluno")
    private List<HistoricoDisciplina> historicoDisciplina = new ArrayList<HistoricoDisciplina>();
    @OneToMany(mappedBy = "aluno")
    private List<HistoricoAtividade> historicoAtividade = new ArrayList<HistoricoAtividade>();
    @OneToMany(mappedBy = "aluno")
    private List<Faltas> faltas = new ArrayList<Faltas>();

    /**
     * Retorna uma String contendo informações de Aluno
     *
     * @return
     */
    @Override
    public String toString() {
        return ("Nome:  " + this.getNome() + "   CPF: " + this.getCpf());
    }

    /**
     * Retorna uma lista do tipo HistoricoDisciplina
     *
     * @return
     */
    public List<HistoricoDisciplina> getHistoricoDisciplina() {
        return historicoDisciplina;
    }

    /**
     * Seta a lista historicoDisciplina
     *
     * @param historicoDisciplina
     */
    public void setHistoricoDisciplina(List<HistoricoDisciplina> historicoDisciplina) {
        this.historicoDisciplina = historicoDisciplina;
    }

    /**
     * Retorna uma lista do tipo HistoricoAtividade
     *
     * @return
     */
    public List<HistoricoAtividade> getHistoricoAtividade() {
        return historicoAtividade;
    }

    /**
     * Seta a lista historicoAtividade
     *
     * @param historicoAtividade
     */
    public void setHistoricoAtividade(List<HistoricoAtividade> historicoAtividade) {
        this.historicoAtividade = historicoAtividade;
    }
    
     /**
     * Adicionar aluno na turma
     *
     * @param falta
     */
    public void adicionarTurmaAluno(Faltas falta) {
        faltas.add(falta);
    }

    /**
     *
     * @param object
     */
    public void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("amanda_gabriel_isabella_lucivania_monicaPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
    
      public void adicionarHistoricoAtividade (HistoricoAtividade historicoAtividade){
        this.historicoAtividade.add(historicoAtividade);
    }
    
}
